﻿// //   Copyright 2007-2011 Comdiv (F. Sadykov) - http://code.google.com/u/fagim.sadykov/
// //   Supported by Media Technology LTD 
// //    
// //   Licensed under the Apache License, Version 2.0 (the "License");
// //   you may not use this file except in compliance with the License.
// //   You may obtain a copy of the License at
// //    
// //        http://www.apache.org/licenses/LICENSE-2.0
// //    
// //   Unless required by applicable law or agreed to in writing, software
// //   distributed under the License is distributed on an "AS IS" BASIS,
// //   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// //   See the License for the specific language governing permissions and
// //   limitations under the License.
// //   
// //   MODIFICATIONS HAVE BEEN MADE TO THIS FILE

using System;

namespace Comdiv.QWeb.Renders {
	public class ViewRender : IRender, IRegistryBound {
		private QWebServiceRegistry registry;
		private IViewEngine viewEngine;


		protected IViewEngine ViewEngine {
			get { return viewEngine; }
		}

		#region IRegistryBound Members

		public void SetRegistry(QWebServiceRegistry registry) {
			this.registry = registry;
			viewEngine = registry.GetNew<IViewEngine>();
		}

		public QWebServiceRegistry Registry {
			get { return registry; }
		}

		#endregion

		#region IRender Members

		public void Render(QWebContext context) {
			context.ContentType = "text/html";
			var viewname = context.ViewName;
			if (string.IsNullOrWhiteSpace(viewname)) {
				viewname = "/" + context.ActionName.Replace(".", "/");
			}
			if (string.IsNullOrWhiteSpace(context.MasterViewName) && !string.IsNullOrWhiteSpace(context.get("layout"))) {
				context.MasterViewName = context.get("layout");
			}
			ViewEngine.Process(viewname, context.MasterViewName, context.ActionResult, context);
		}

		public void RenderError(Exception error, QWebContext context) {
			context.ContentType = "text/html";
			context.Output.Write("<div class='error'><h2>error on " + context.ActionName + "</h2><textarea cols='60' rows='10'>" +
			                     error.ToString().Replace("<", "&lt;") + "</textarea></div>");
		}

		public bool NeedResult {
			get { return true; }
		}

		#endregion
	}
}